package com.miku.blog.service;

import com.miku.blog.domain.Comment;
import com.baomidou.mybatisplus.extension.service.IService;
import com.miku.blog.domain.param.ReceptionParam;
import com.miku.blog.domain.pojo.ResponseResult;

import java.util.List;

/**
* @author Miku
* @description 针对表【tb_comment】的数据库操作Service
* @createDate 2022-05-26 17:53:41
*/
public interface CommentService extends IService<Comment> {


    /**
     * 根据文章ID 及文 评论类型  删除评论 { 真正删除 (物理删除) }
     * @param articleId
     * @return
     */
    boolean deleteCommentByArticleIdAndType(Integer articleId,Integer type);


    /**
     * 根据评论ID 物理删除评论集合
     * @param commentIdList
     * @return
     */
    ResponseResult deleteCommentListById(Integer[] commentIdList);


    /**
     * 分页查询评论消息列表
     * @param current
     * @param size
     * @param isReview
     * @param type
     * @return
     */
    ResponseResult comments(Integer current, Integer size,Integer type, Integer isReview,String keywords);


    /**
     * 获取对应类型文章下的评论列表 (二级列表)
     * @param current
     * @param type
     * @param articleId
     * @return
     */
    ResponseResult getComments(Integer current, Integer type, Integer articleId);

    /**
     * 分页 获取 根评论下的子评论
     * @param commentId
     * @param current
     * @param size
     * @return
     */
    ResponseResult getChildrenComments(Integer commentId, Integer current, Integer size);


    /**
     * 根据文章ID 及 类型  获取 其评论个数 [只获取根评论的个数]
     * @param articleId
     * @param type
     * @return
     */
    long getCommentCountByArticleIdAndType(Integer articleId, Integer type);


    /**
     * 更新评论信息
     * @param receptionParam
     * @return
     */
    ResponseResult updateComment(ReceptionParam receptionParam);


    /**
     * 获取通过审核的 文章根评论
     * @return
     */
    List<Comment> getAllRootCommentsByType(Integer type);

    /**
     * 获取通过审核的 文章子评论
     * @param commentId
     * @return
     */
    List<Comment> getAllChildrenCommentsByIdAndType(Integer commentId,Integer type);


    /**
     * 添加评论
     * @param comment
     * @return
     */
    ResponseResult addComment(Comment comment);


    /**
     * 根据 文章类型  及 文章ID  获取其下的所有评论
     * @param articleId
     * @param type
     */
    List<Comment> getArticleAllCommentListByIdAndType(Integer articleId,Integer type);
}
